public class XQi {

    public static int pao(int[] A, int[] B, int qa, int[][] ju) {
        int res; // result 结果

        res = pao1(A, B, qa, ju);
        // res = pao2(A, B, qa, ju);
        // res = pao3(A, B, qa, ju);

        return res;
    }

    public static int pao1(int[] A, int[] B, int qa, int[][] ju) {
        // 获取起点和终点的坐标
        int ya = A[0], xa = A[1];
        int yb = B[0], xb = B[1];

        // 判断是否在同一行或同一列
        if (ya != yb && xa != xb) {
            System.out.println(" 炮只能直线移动！");
            return -1;
        }

        // 获取目标位置的棋子
        int qb = ju[yb][xb];

        // 判断是否吃子
        boolean isCapture = (qb != 0);

        // 计算路径上的棋子数
        int count = 0;
        if (ya == yb) {
            // 同一行，横向移动
            int step = xb > xa ? 1 : -1;
            for (int x = xa + step; x <= xb; x += step) {
                if (ju[ya][x] != 0) {
                    count++;
                }
            }
        } else {
            // 同一列，纵向移动
            int step = yb > ya ? 1 : -1;
            for (int y = ya + step; y != yb; y += step) {
                if (ju[y][xa] != 0) {
                    count++;
                }
            }
        }

        // 判断是否可以移动
        if (isCapture) {
            // 吃子时，必须恰好跨一个子
            if (count != 1) {
                System.out.println(" 炮吃子时必须跨一个子！");
                return -1;
            }
        } else {
            // 不吃子时，路径上不能有棋子
            if (count != 0) {
                System.out.println(" 炮移动时不能跨子！");
                return -1;
            }
        }

        // 判断目标位置是否有己方棋子
        if ((qa > 0 && qb > 0) || (qa < 0 && qb < 0)) {
            System.out.println(" 目标位置有己方棋子，不能移动！");
            return -1;
        }

        // 移动成功
        return isCapture ? 2 : 1; // 吃子返回2，移动返回1
    }
}